#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__title__ = ""
__author__ = "Administrator"
__mtime__ = "2016/6/17"
"""
#使用内嵌包装函数来确保新函数都被调用
#由于函数也是一个对象，而且函数对象可以被赋值给变量，所以，通过变量也可以调用改函数。
#函数对象有一个__name__属性，可以拿到函数的名字
#在代码运行期间动态增加功能的方式，称之为"装饰器"（Decorator）
#本质上，decorator就是一个返回函数的高阶函数。


'''

def outer(fun):

    def wapper():

        print 'before func1'

        fun()

        print 'after func1'

    return wapper



@outer

def func1():

    print 'hi,func1'





func1()

print '########'

func1()

'''
def log(func):
    def wrapper(*args,**kw):
        print 'call %s()' % func.__name__
        return func(*args,**kw)
    return wrapper
#log函数是一个装饰器，所以接收一个函数作为参数，并返回一个函数。


@log
#相当于执行了now = log(now)


def now():
    print '2016-04-21'

now()
'''

f = now

f()

print now.__name__

print f.__name__

'''
